When a provider is REQUEST-scoped, every provider that injects it also becomes REQUEST-scoped automatically — this propagates up the entire dependency chain. In high-throughput APIs this causes significant overhead because the full chain must be constructed and torn down on every request instead of reusing singletons.
Scope propagation is automatic and silent — NestJS promotes all consumers of a REQUEST-scoped provider to REQUEST scope without any explicit annotation. This can cause unexpected performance issues if a REQUEST-scoped provider is deep in a widely-used dependency chain.
Pass request context as a method argument instead of injecting REQUEST into a service.
Keep REQUEST-scoped providers at the outermost layer (controller or a thin adapter service).
Benchmark before opting into REQUEST scope — it is often unnecessary.
Use singleton services with context passed via parameters for most business logic.